package com.foreveross.fetl.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class RowkeyUtils {
	
	public static int LENGTH = 44;
	
	public static int DOUBLE_LENGTH=52;
	
	public static int FREIGHT_PRICE_LENGTH = 53;
	
	
	public static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHH");
	
	/**
	 * 开始RowKey
	 */
	public static int START_ROW_KEY =1;
	
	/**
	 * 结束RowKey
	 */
	public static int STOP_ROW_KEY =2;
	
	
	private static int[] d = {0,1,2,3,4,5,6,7,8,9};
	
	public static void main(String[] arts){
		System.out.println(getFlightIdHbaseKey("CA0312"));
	}
	
	/**
	 * 将flightId转化为固定长度的flightId
	 * @param flightId
	 * @return
	 */
	public static String getFlightIdHbaseKey(String flightId){
		StringBuffer sb =new StringBuffer();
		for(int i=flightId.length() ;i<8;i++){
			sb.append("0");
		}
		sb.append(flightId);
		return sb.toString();
	}
	
	/**
	 * 返回规定长度的随机整数
	 * @param l
	 * @return
	 */
	public static String getRandomInteger(int l){
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<l;i++){
			sb.append(d[(int)(10*Math.random())]);
		}
		return sb.toString();
		
	}
	
	/**
	 * 
	 * @param source
	 * @param tail
	 * @param length
	 * @return
	 */
	public static String appendTail(String source,String tail,int length){
		StringBuffer sb = new StringBuffer();
		sb.append(source);
		for(int i=source.length();i<length;i++){
			sb.append(tail);
		}
		return sb.toString();
	}
	
	/**
	 * 往返RowKey生成
	 * @param grabTime 抓取日期10位 2014022115
	 * @param channel 渠道 5位 20005
	 * @param fromCity 出发城市三字码3位 PEK
	 * @param toCity   到达城市三字码3位 CAN
	 * @param flightDate 航班日期8位  20140228
	 * @param returnDate 返程时间 8位 20140701
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @param flightNo 航班号
	 * @return
	 */
	public static String getDoubleRowKey(String grabTime ,String channel ,String fromCity ,String toCity,String flightDate,String returnDate,String flightNo,int type){
		StringBuffer rowKey = new StringBuffer();// 组装rowkey
			if(null!=channel && !"".equalsIgnoreCase(channel) && channel.length()==5){
				rowKey.append(channel);//渠道 5位
				if(null!=grabTime && !"".equalsIgnoreCase(grabTime) && grabTime.length()==10){
					rowKey.append(grabTime);//抓取日期10位
					if(null!=fromCity && !"".equalsIgnoreCase(fromCity) && fromCity.length()==3){
						rowKey.append(fromCity);//3
						if(null!=toCity && !"".equalsIgnoreCase(toCity) && toCity.length()==3){
							rowKey.append(toCity);//3
							if(null!=flightDate && !"".equalsIgnoreCase(flightDate)&& flightDate.length()==8){
								rowKey.append(flightDate);
								if(null!=returnDate &&!"".equals(returnDate) &&returnDate.length()==8){
									rowKey.append(returnDate);
									if(null!=flightNo && !"".equals(flightNo)){
										if(flightNo.length()<9){
											rowKey.append(flightNo);
										}else{
											rowKey.append(flightNo.substring(0, 8));
										}
									}
									return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
								}else{
									if(null!=returnDate && !"".equals(returnDate)){
										rowKey.append(returnDate.length()>8?returnDate.substring(0,8):returnDate);
									}
									return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
								}
								
							}else{
								if(null!=flightDate && !"".equals(flightDate)){
									rowKey.append(flightDate.length()>8?flightDate.substring(0,8):flightDate);
								}
								return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
							}
						}else{
							if(null!=toCity && !"".equalsIgnoreCase(toCity)){
								rowKey.append(toCity.length()>3?toCity.substring(0,3):toCity);
							}
							return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
						}
					}else{
						if(null!=fromCity && !"".equalsIgnoreCase(fromCity)){
							rowKey.append(fromCity.length()>3?fromCity.substring(0,3):fromCity);
						}
						return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
					}
				
			}else{
				if(null!=grabTime && !"".equalsIgnoreCase(grabTime)){
					rowKey.append(grabTime.length()>10?grabTime.substring(0,10):grabTime);
				}
				return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
			}
		}else{
			if(null!=channel && !"".equalsIgnoreCase(channel)){
				rowKey.append(channel.length()>5?channel.substring(0,5):channel);
			}
			return appendRowkey(rowKey.toString(),RowkeyUtils.DOUBLE_LENGTH,type);
		}
		
		
	}
	
	/**
	 * 根据字段生成  CRAWL_PLANE_FREIGHT 的 rowkey
	 * @param grabTime 抓取日期10位 2014022115
	 * @param channel 渠道 5位 20005
	 * @param fromCity 出发城市三字码3位 PEK
	 * @param toCity   到达城市三字码3位 CAN
	 * @param flightDate 航班日期 8位 或者10位 20140228  2014022809
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @param flightNo 航班号
	 * @return
	 */
	public static String getRowKey(String grabTime ,String channel ,String fromCity ,String toCity,String flightDate,String flightNo,int type){
		StringBuffer rowKey = new StringBuffer();// 组装rowkey
		
			if(null!=channel && !"".equalsIgnoreCase(channel) && channel.length()==5){
				rowKey.append(channel);//渠道 5位
				if(null!=grabTime && !"".equalsIgnoreCase(grabTime) && grabTime.length()==10){
					rowKey.append(grabTime);//抓取日期10位
					if(null!=fromCity && !"".equalsIgnoreCase(fromCity) && fromCity.length()==3){
						rowKey.append(fromCity);//3
						if(null!=toCity && !"".equalsIgnoreCase(toCity) && toCity.length()==3){
							rowKey.append(toCity);//3
							if(null!=flightDate && !"".equalsIgnoreCase(flightDate)&& flightDate.length()==10){
								rowKey.append(flightDate);
								if(null!=flightNo && !"".equals(flightNo)){
									if(flightNo.length()<9){
										rowKey.append(flightNo);
									}else{
										rowKey.append(flightNo.substring(0, 8));
									}
								}
								return appendRowkey(rowKey.toString(),RowkeyUtils.LENGTH,type);
							}else{
								if(null!=flightDate && !"".equals(flightDate)){
									rowKey.append(flightDate);
								}
								return appendRowkey(rowKey.toString(),RowkeyUtils.LENGTH,type);
							}
						}else{
							if(null!=toCity && !"".equalsIgnoreCase(toCity)){
								rowKey.append(toCity.length()>3?toCity.substring(0,3):toCity);
							}
							return appendRowkey(rowKey.toString(),RowkeyUtils.LENGTH,type);
						}
					}else{
						if(null!=fromCity && !"".equalsIgnoreCase(fromCity)){
							rowKey.append(fromCity.length()>3?fromCity.substring(0,3):fromCity);
						}
						return appendRowkey(rowKey.toString(),RowkeyUtils.LENGTH,type);
					}
				
			}else{
				if(null!=grabTime && !"".equalsIgnoreCase(grabTime)){
					rowKey.append(grabTime.length()>10?grabTime.substring(0,10):grabTime);
				}
				return appendRowkey(rowKey.toString(),RowkeyUtils.LENGTH,type);
			}
		}else{
			if(null!=channel && !"".equalsIgnoreCase(channel)){
				rowKey.append(channel.length()>5?channel.substring(0,5):channel);
			}
			return appendRowkey(rowKey.toString(),RowkeyUtils.LENGTH,type);
		}

	}
	
	
	/**
	 * 根据字段生成  CRAWL_PLANE_FREIGHT 的 rowkey
	 * @param grabTime 抓取日期10位 2014022115
	 * @param channel 渠道 5位 20005
	 * @param fromCity 出发城市三字码3位 PEK
	 * @param toCity   到达城市三字码3位 CAN
	 * @param flightDate 航班日期 8位 或者10位 20140228  2014022809
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @return
	 */
	public static String getRowKey(String grabTime ,String channel ,String fromCity ,String toCity,String flightDate,int type){
			return RowkeyUtils.getRowKey(grabTime, channel , fromCity, toCity, flightDate, null, type);

	}
	
	/**
	 * 根据字段生成  CRAWL_PLANE_FREIGHT 的 rowkey
	 * @param grabTime 抓取日期10位 2014022115
	 * @param channel 渠道 5位 20005
	 * @param fromCity 出发城市三字码3位 PEK
	 * @param toCity   到达城市三字码3位 CAN
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @return
	 */
	public static String getRowKey(String grabTime ,String channel ,String fromCity ,String toCity,int type){
			return RowkeyUtils.getRowKey(grabTime, channel , fromCity, toCity, null, null, type);

	}
	
	/**
	 * 根据字段生成  CRAWL_PLANE_FREIGHT 的 rowkey
	 * @param grabTime 抓取日期10位 2014022115
	 * @param channel 渠道 5位 20005
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @return
	 */
	public static String getRowKey(String grabTime ,String channel,int type){
		return RowkeyUtils.getRowKey(grabTime, channel,  null, null, null, type);
	}
	
	/**
	 * 
	 * 根据字段生成  CRAWL_PLANE_FREIGHT 的 rowkey
	 * @param grabTime 抓取时间 
	 * @param channel 渠道 5位 20005
	 * @param fromCity 出发城市三字码3位 PEK
	 * @param toCity   到达城市三字码3位 CAN
	 * @param flightDate 航班日期 
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @return
	 */
	public static String getRowKey(Date grabTime ,String channel ,String fromCity ,String toCity,Date flightDate,int type){
		if(null==grabTime || null==flightDate) return null;
		String grabTimeStr=DateUtils.format(grabTime, "yyyyMMddHH");
		String flightDateStr =DateUtils.format(flightDate, "yyyyMMdd");
		return RowkeyUtils.getRowKey(grabTimeStr, channel, fromCity, toCity, flightDateStr, type);
	}
	
	/**
	 * 
	 * 根据字段生成  CRAWL_PLANE_FREIGHT 的 rowkey
	 * @param grabTime 抓取时间
	 * @param channel 渠道 5位 20005
	 * @param type 开始rowkey 为1  结束rowkey 为2 
	 * @return
	 */
	public static String getRowKey(Date grabTime,String channel,int type){
		if(null==grabTime) return null;
		String grabTimeStr=DateUtils.format(grabTime, "yyyyMMddHH");
		return RowkeyUtils.getRowKey(grabTimeStr, channel,  type);
	}
	
	/**
	 * 补全rowkey
	 * @param rowkey 
	 * @param length 长度
	 * @param type  1为开始rowkey 补0  2为结束rowkey 补 Z
	 * @return
	 */
	public static String appendRowkey(String rowkey,int length,int type){
		StringBuffer newRowkey = new StringBuffer();
		newRowkey.append(rowkey);
		for (int i = newRowkey.length(); i < length; i++) {
			if(type==1){
				newRowkey.append("0");
			}
			if(type==2){
				newRowkey.append("Z");
			}
		}
		return newRowkey.toString();
	}


}
